home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / clang / gnumake.zip / FILE.H < prev    next >
C/C++ Source or Header  |  1994-04-05  |  5KB  |  110 lines

  1. /* Definition of target file data structures for GNU Make.
  2. Copyright (C) 1988, 89, 90, 91, 92, 93, 94 Free Software Foundation, Inc.
  3. This file is part of GNU Make.
  4.  
  5. GNU Make is free software; you can redistribute it and/or modify
  6. it under the terms of the GNU General Public License as published by
  7. the Free Software Foundation; either version 2, or (at your option)
  8. any later version.
  9.  
  10. GNU Make is distributed in the hope that it will be useful,
  11. but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. GNU General Public License for more details.
  14.  
  15. You should have received a copy of the GNU General Public License
  16. along with GNU Make; see the file COPYING.  If not, write to
  17. the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  18.  
  19. /* Structure that represents the info on one file
  20.    that the makefile says how to make.
  21.    All of these are chained together through `next'.  */
  22.  
  23. struct file
  24.   {
  25.     struct file *next;
  26.     char *name;
  27.     struct dep *deps;
  28.     struct commands *cmds;    /* Commands to execute for this target */
  29.     char *stem;            /* Implicit stem, if an implicit
  30.                        rule has been used */
  31.     struct dep *also_make;    /* Targets that are made by making this.  */
  32.     time_t last_mtime;        /* File's modtime, if already known.  */
  33.     struct file *prev;        /* Previous entry for same file name;
  34.                    used when there are multiple double-colon
  35.                    entries for the same file.  */
  36.  
  37.     /* File that this file was renamed to.  After any time that a
  38.        file could be renamed, call `check_renamed' (below).  */
  39.     struct file *renamed;
  40.  
  41.     /* List of variable sets used for this file.  */
  42.     struct variable_set_list *variables;
  43.  
  44.     /* Immediate dependent that caused this target to be remade,
  45.        or nil if there isn't one.  */
  46.     struct file *parent;
  47.  
  48.     /* For a double-colon entry, this is the first double-colon entry for
  49.        the same file.  Otherwise this is null.  */
  50.     struct file *double_colon;
  51.  
  52.     short int update_status;    /* Status of the last attempt to update,
  53.                    or -1 if none has been made.  */
  54.  
  55.     enum            /* State of the commands.  */
  56.       {        /* Note: It is important that cs_not_started be zero.  */
  57.     cs_not_started,        /* Not yet started.  */
  58.     cs_deps_running,    /* Dep commands running.  */
  59.     cs_running,        /* Commands running.  */
  60.     cs_finished        /* Commands finished.  */
  61.       } command_state ENUM_BITFIELD (2);
  62.  
  63.     unsigned int precious:1;    /* Non-0 means don't delete file on quit */
  64.     unsigned int tried_implicit:1; /* Nonzero if have searched
  65.                       for implicit rule for making
  66.                       this file; don't search again.  */
  67.     unsigned int updating:1;    /* Nonzero while updating deps of this file */
  68.     unsigned int updated:1;    /* Nonzero if this file has been remade.  */
  69.     unsigned int is_target:1;    /* Nonzero if file is described as target.  */
  70.     unsigned int cmd_target:1;    /* Nonzero if file was given on cmd line.  */
  71.     unsigned int phony:1;    /* Nonzero if this is a phony file
  72.                    i.e., a dependency of .PHONY.  */
  73.     unsigned int intermediate:1;/* Nonzero if this is an intermediate file.  */
  74.     unsigned int dontcare:1;    /* Nonzero if no complaint is to be made if
  75.                    this target cannot be remade.  */
  76.   };
  77.  
  78. /* Number of intermediate files entered.  */
  79.  
  80. extern unsigned int num_intermediates;
  81.  
  82. extern struct file *default_goal_file, *suffix_file, *default_file;
  83.  
  84.  
  85. extern struct file *lookup_file (), *enter_file ();
  86. extern void remove_intermediates (), snap_deps ();
  87. extern void rename_file (), file_hash_enter ();
  88.  
  89.  
  90. extern time_t f_mtime ();
  91. #define file_mtime_1(f, v) \
  92.   ((f)->last_mtime != (time_t) 0 ? (f)->last_mtime : f_mtime ((f), v))
  93. #define file_mtime(f) file_mtime_1 ((f), 1)
  94. #define file_mtime_no_search(f) file_mtime_1 ((f), 0)
  95.  
  96. /* Modtime value to use for `infinitely new'.  We used to get the current time
  97.    from the system and use that whenever we wanted `new'.  But that causes
  98.    trouble when the machine running make and the machine holding a file have
  99.    different ideas about what time it is; and can also lose for `force'
  100.    targets, which need to be considered newer than anything that depends on
  101.    them, even if said dependents' modtimes are in the future.
  102.  
  103.    NOTE: This assumes 32-bit `time_t's, but I cannot think of a portable way
  104.    to produce the largest representable integer of a given signed type.  */
  105. #define NEW_MTIME    ((time_t) 0x7fffffff)
  106.  
  107.  
  108. #define check_renamed(file) \
  109.   while ((file)->renamed != 0) (file) = (file)->renamed /* No ; here.  */
  110.